/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ucue.sep.gestores;

import edu.ucue.sep.controller.PersonaJpaController;
import edu.ucue.sep.model.Persona;
import edu.ucue.sep.model.Usuario;
import java.util.ArrayList;
import java.util.List;
import javax.el.ELContext;
import javax.el.ValueExpression;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author CHRISTIAN
 */
@ManagedBean(name = "clienteManager")
@SessionScoped
public class ClienteManager {
    private Persona persona;
    private String nombre;
    private String apellido;
    private String cedula;
    private String direccion;
    private String telefono;
    private String email;
    private String tipo; 
    private Usuario usuario;
    private String username;
    private String password1;
    private String password2;
    private String busqueda;
    private List<Persona> personas;
    private List<Persona> filteredPersonas;
    
    private PersonaJpaController pjpa;
    
     public static ClienteManager getInstance() {
        ELContext context = FacesContext.getCurrentInstance().getELContext();
        ValueExpression ex = FacesContext.getCurrentInstance().getApplication().getExpressionFactory().
                createValueExpression(context, "#{clienteManager}", ClienteManager.class);
        return (ClienteManager) ex.getValue(context);
    }
     
     public void init(){
        persona=new Persona();
        nombre="";
        apellido="";
        cedula="";
        direccion="";
        telefono="";
        email="";
        tipo=""; 
        usuario=new Usuario();
        username="";
        password1="";
        password2="";
        busqueda="";
        cargarLista();
     }
     
     public void cargarLista(){
         pjpa=new PersonaJpaController();
         personas=new ArrayList<Persona>();
         personas=pjpa.findPersonaEntities();
     }

    public String guardar(){
        //persona=new Persona();
        if (nombre.equals("") || apellido.equals("") || cedula.equals("") || email.equals("") || 
                tipo.equals("") || direccion.equals("") || telefono.equals("")){
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(null, "Existen campos por llenar"));
            return "";        
        }
        persona.setApellido(apellido);
        persona.setCedula(cedula);
        persona.setDireccion(direccion);
        persona.setEmail(email);
        persona.setNombre(nombre);
        persona.setTelefono(telefono);
        persona.setTipo(tipo);
        
        
        usuario.setUsername(username);
        
        
        
        if (password1.equals(password2)){
            usuario.setPassword(password1);
        }else{
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(null, "Las contraseñas no concuerdan"));
            return "";
        }
        
        persona.setUsuario(usuario);
        try{
            pjpa=new PersonaJpaController();
            if (persona.getIdPersona()==0){
                
                List<Persona> auxp=pjpa.findPersonaEntitiesWhere("where o.cedula='"+cedula+"'");
                if (!auxp.isEmpty()){
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(null, "Ya existe un usuario con la cedula ingresada"));
                    return "";  
                }
                auxp=pjpa.findPersonaEntitiesWhere("where o.usuario.username='"+username+"'");
                if (!auxp.isEmpty()){
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(null, "Ya existe un usuario con el nombre de usuario ingresado"));
                    return "";  
                }
                pjpa.create(persona);
            }else{
                
                pjpa.edit(persona);
            }
            init();
        }catch(Exception e){
            e.printStackTrace();
        }
        return "";
    } 
    
    public String buscar() {
        pjpa=new PersonaJpaController();
        if(busqueda.equals("")){
            cargarLista();
        }
        else{
            personas=pjpa.findPersonaEntitiesWhere("where o.cedula like '%"+busqueda+"%' or o.nombre like '%"+busqueda+"%' or o.apellido like '%"+busqueda
                    +"%' or o.direccion like '%"+busqueda+"%' or o.telefono like '%"+busqueda+"%' or o.tipo like '%"+busqueda+"%' or o.email like '%"+busqueda
                    +"%' or o.usuario.username like '%"+busqueda+"%'");
            
        }
        return "";
    }    
    
    public String editarUsuario(Persona person){
        persona=person;
        nombre=persona.getNombre();
        apellido=persona.getApellido();
        cedula=persona.getCedula();
        direccion=persona.getDireccion();
        telefono=persona.getTelefono();
        email=persona.getEmail();
        tipo=persona.getTipo(); 
        usuario=persona.getUsuario();
        if (usuario!=null){
            username=usuario.getUsername();
            password1=usuario.getPassword();
            password2=usuario.getPassword(); 
        }
        else{
            username="";
            password1="";
            password2=""; 
        }
        
        return "";
    }   
    
    public String returntoIndex(){
        return "index";
    }
    
    public Persona getPersona() {
        return persona;
    }

    public void setPersona(Persona persona) {
        this.persona = persona;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getApellido() {
        return apellido;
    }

    public void setApellido(String apellido) {
        this.apellido = apellido;
    }

    public String getCedula() {
        return cedula;
    }

    public void setCedula(String cedula) {
        this.cedula = cedula;
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public String getTelefono() {
        return telefono;
    }

    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword1() {
        return password1;
    }

    public void setPassword1(String password1) {
        this.password1 = password1;
    }

    public String getPassword2() {
        return password2;
    }

    public void setPassword2(String password2) {
        this.password2 = password2;
    }

    public List<Persona> getPersonas() {
        return personas;
    }

    public void setPersonas(List<Persona> personas) {
        this.personas = personas;
    }

    public String getBusqueda() {
        return busqueda;
    }

    public void setBusqueda(String busqueda) {
        this.busqueda = busqueda;
    }

    public List<Persona> getFilteredPersonas() {
        return filteredPersonas;
    }

    public void setFilteredPersonas(List<Persona> filteredPersonas) {
        this.filteredPersonas = filteredPersonas;
    }

}
